/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑, 永无BUG!
 * 　　　　┃　　　┃Code is far away from bug with the animal protecting
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 */
package com.zkgengkun.console.service.impl;

import com.zkgengkun.console.service.CharacterService;
import com.zkgengkun.domain.Character;
import com.zkgengkun.repository.CharacterRepository;
import com.zkgengkun.support.util.BeanUtils;
import com.zkgengkun.support.util.PageUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;

/**
 * @author gengshikun
 * @date 2017/11/5
 */
@Service("characterService")
public class CharacterServiceImpl implements CharacterService {

    @Autowired
    private CharacterRepository characterRepository;

    /**
     * Character添加
     *
     * @param character
     */
    @Override
    public void save(Character character) {
        character.setCreateTime(System.currentTimeMillis());
        character.setDeleteBoolean(Boolean.FALSE);
        this.characterRepository.save(character);
    }

    /**
     * 分页获得List
     *
     * @param query
     * @param pageNo
     * @return
     */
    @Override
    public Page getListForPage(String query, Integer pageNo) {

        Page<Character> pager = null;

        if (StringUtils.isNotBlank(query)) {
            pager = this.characterRepository.findByNameLike(query, PageUtils.buildPageRequest(pageNo));
        } else {
            pager = this.characterRepository.findAll(PageUtils.buildPageRequest(pageNo));
        }

        return pager;
    }

    /**
     * 根据id获得Character
     *
     * @param id
     * @return
     */
    @Override
    public Character getOne(String id) {
        Character character = this.characterRepository.findOne(id);
        return character;
    }

    /**
     * 根据title获得one
     *
     * @param name
     * @return
     */
    @Override
    public Character getOneByName(String name) {
        return this.characterRepository.findByName(name);
    }

    /**
     * 保存并更新
     *
     * @param character
     */
    @Override
    public void saveAndEdit(Character character) {
        Character target = this.characterRepository.findOne(character.getCharacterId());
        BeanUtils.copyProperties(character, target);
        this.characterRepository.saveAndFlush(target);
    }
}
